annotationsとTYPE_CHECKINGでPython Lambdaにおいてboto3-stubsをデプロイパッケージに含めずに使う
2024.12.28
こんばんは、製造ビジネステクノロジー部の夏目です。
今回OSSのコントリビュート中に、PythonのTypeHintsで痒いところに手の届く内容を見つけたので共有します。
何を見つけたのか
Pythonでboto3を使うとき、そのままではIDEの補完もほとんど効かないためboto3-stubsを使うことがあります。
しかしTypeHintsで記載しているとデプロイパッケージにboto3-stubsを入れる必要がありました。
今回、デプロイパッケージにboto3-stubsを入れずに使う方法を見つけました。
annotationsとTYPE_CHECKINGで実行時は気にしなくてよくなる
from __future__ import annotations
import json
from typing import TYPE_CHECKING
import boto3
if TYPE_CHECKING:
from mypy_boto3_sts import STSClient
sts: STSClient = boto3.client("sts")
def lambda_handler(event, context):
resp = sts.get_caller_identity()
print(
json.dumps(
resp,
ensure_ascii=False,
default=lambda x: {"type": str(type(x)), "value": str(x)},
)
)
一行目に、
from __future__ import annotations
TypeHints用にimportする部分で、
if TYPE_CHECKING:
from mypy_boto3_sts import STSClient
と書くことでLambdaのDeploy Packageに boto3-stubs[sts]
がなくても実行時にエラーが出ないようになる。
ただ、何故大丈夫なのかはわかっていません、すみません。